<?php 
namespace lib;
use lib\AesRsa_Encrypter;
use lib\DB;
use lib\BaseController;
class Examine{
    private  static $db = null;
    private  static $common = null;
    public static function init() {
        if (self::$db === null) {
            self::$db = new DB();
        }
        if(self::$common === null){
            self::$common = new BaseController();
        }
    }
    public static function getDB() {
        if (self::$db === null) {
            self::init(); 
        }
        return self::$db;
    }
    public static function getCommon() {
        if (self::$common === null) {
            self::init(); 
        }
        return self::$common;
    }
    
    
    /**
    * 检查必要的参数是否为空
    * 
    * 此静态函数用于检查提供的参数数组中的每个参数是否为空，如果有空值则返回错误信息。
    * 支持通过排除数组指定不需要检查的参数。
    *
    * @param array $params 包含需要检查的参数数组
    * @param array $excludes 需要排除检查的参数键名数组
    * @param bool $send 如果为 true，当发现空参数时会返回 true 而不是退出，默认为 false
    * @return bool 如果任意参数为空且 $send 为 true，则返回 true；否则返回 false
    */
    public static function checkRequiredParams($params, $excludes = [], $send = false) {
       foreach ($params as $key => $param) {
           if (in_array($key, $excludes)) {
               continue;
           }
           if (empty($param)) {
               if($send) return true;
               exitjson(-1, '必填项不可为空！');
           }
       }
       return false;
    }
    
    //配置目录隐藏规则
    public static function getHideIds(){
        global $conf;
        $hideIds = [];
        $menuRules = [
        ['work_zt', 0, 60],
        ['juheshoukuan', 0, 63],
        ['juheshoukuan', null, 63],
            // 添加更多规则，格式：['配置项', 值, 要隐藏的ID]
            // 例如：['feature_flag', false, 33],
            //      ['user_level', 'basic', 44],
        ];
        foreach ($menuRules as $rule) {
            list($configKey, $configValue, $hideId) = $rule;
            if (isset($conf[$configKey]) && $conf[$configKey] == $configValue) {
                $hideIds[] = $hideId;
            }
        }
        return $hideIds;
    }
    //删除菜单
    public static function removeMenuById($menu, $removeIds) {
        foreach($menu as $key => &$item) {
            // 检查当前项是否需要删除
            if(in_array($item['id'], $removeIds)) {
                unset($menu[$key]);
                continue;
            }
            
            // 递归处理子菜单
            if(isset($item['children']) && is_array($item['children'])) {
                $item['children'] = self::removeMenuById($item['children'], $removeIds);// 如果子菜单为空，可以选择删除父菜单
                if(empty($item['children'])) {
                    unset($item['children']);
                }
            }
        }
        
        // 重新索引数组
        return array_values($menu);
    }
    public static function Wx_protocol($qr_row){
        $wx = Wx_protocol($qr_row['xf_type']);
        if(empty($wx))return ['code'=>-1];
        $wxyunurl = null;
        if(!empty($qr_row['wxyunurl'])){
            $wxyunurl = self::getDB()->wxyunurlrow($qr_row['wxyunurl'],'id',"`id`,`url`,`status`");
            if($wxyunurl && $wxyunurl['status'] == 1)$wxyunurl = $wxyunurl['url'];
        }
        
        return new $wx($wxyunurl);
        
    }
    
}

?>